﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data.SqlClient;

namespace QLMBMT
{
    public partial class FrmQLHangHoa : DevExpress.XtraEditors.XtraForm
    {
        // Khai báo
        int sua = 0;
        int update = 0;
        private DataSet ds = new DataSet();
        private DataTable dt = new DataTable();
        private SqlDataAdapter da = new SqlDataAdapter();
        private SqlCommand com = new SqlCommand();
        private DataSet daS = new DataSet();
        private DataTable daT = new DataTable();

        private SqlDataAdapter daA = new SqlDataAdapter();
        private SqlCommand comm = new SqlCommand();
        private DataSet dataS = new DataSet();
        private DataTable dataT = new DataTable();
        private SqlDataAdapter dataA = new SqlDataAdapter();
        private SqlCommand command = new SqlCommand();

        classConnection _classConnection = new classConnection();

        // Hàm đưa dữ liệu lên các Lookup Edit và Data GridView
        public void LoadData()
        {
            
            // Đổ dữu liệu vào data gridview
            com = new SqlCommand("Select * from LOAI_HANG", _classConnection.con);
            da = new SqlDataAdapter();
            da.SelectCommand = com;
            ds = new DataSet();
            da.Fill(ds);
            dgLoaiHang.DataSource = ds.Tables[0];

            txtMaLoai.DataBindings.Clear();
            txtMaLoai.DataBindings.Add("EditValue", dgLoaiHang.DataSource, "MaLoaiHang");
            txtTenLoai.DataBindings.Clear();
            txtTenLoai.DataBindings.Add("EditValue", dgLoaiHang.DataSource, "TenLoaiHang");

            // Thiết lập trạng thái cho các control
            txtTenLoai.Properties.ReadOnly = true;
            txtMaLoai.Properties.ReadOnly = true;
            btnThem.Enabled = true;
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
            btnLuu.Enabled = false;
            btnHuy.Enabled = false;
            btnThoat.Enabled = true;
            dgLoaiHang.Enabled = true;

            command = new SqlCommand("Select * from LOAI_HANG", _classConnection.con);
            dataA = new SqlDataAdapter();
            dataS = new DataSet();
            dataA.SelectCommand = command;
            dataA.Fill(dataS);
            lupMaLoai.Properties.DataSource = dataS.Tables[0];
            GridLookUpEdit_RefMaLoai.DataSource = dataS.Tables[0];

            //  Đổ dữu liệu vào data gridview
            comm = new SqlCommand("Select * from MAT_HANG", _classConnection.con);
            daA = new SqlDataAdapter();
            daA.SelectCommand = comm;
            daS = new DataSet();
            daA.Fill(daS);
            dgMatHang.DataSource = daS.Tables[0];


            txtMaHang.DataBindings.Clear();
            txtMaHang.DataBindings.Add("EditValue", dgMatHang.DataSource, "MAHANG");
            txtTenHang.DataBindings.Clear();
            txtTenHang.DataBindings.Add("EditValue", dgMatHang.DataSource, "TENHANG");
            txtNhaSX.DataBindings.Clear();
            txtNhaSX.DataBindings.Add("EditValue", dgMatHang.DataSource, "NHASANXUAT");
            txtSoSeri.DataBindings.Clear();
            txtSoSeri.DataBindings.Add("EditValue", dgMatHang.DataSource, "SOSERI");
            lupMaLoai.DataBindings.Clear();
            lupMaLoai.DataBindings.Add("EditValue", dgMatHang.DataSource, "MALOAIHANG");
            dateNamsanxuat.DataBindings.Clear();
            dateNamsanxuat.DataBindings.Add("EditValue", dgMatHang.DataSource, "NAMSANXUAT");

            // Thiết lập trạng thái cho các control
            txtMaHang.Properties.ReadOnly = true;
            txtSoSeri.Properties.ReadOnly = true;
            txtNhaSX.Properties.ReadOnly = true;
            txtTenHang.Properties.ReadOnly = true;
            lupMaLoai.Properties.ReadOnly = true;          
            dateNamsanxuat.Properties.ReadOnly = true;
         
            btnThemMH.Enabled = true;
            btnSuaMH.Enabled = true;
            btnXoaMH.Enabled = true;
            btnLuuMH.Enabled = false;
            btnHuyMH.Enabled = false;
            btnThoatMH.Enabled = true;
            dgMatHang.Enabled = true;

        }

        public FrmQLHangHoa()
        {
            InitializeComponent();
            _classConnection.KetNoiCSDL();
        }

        // Xử lí sự kiện Load Form
        private void FrmQLHangHoa_Load(object sender, EventArgs e)
        {
            LoadData();
        }

        // Xử lí sự kiện Click của nút "Thêm" Mặt hàng
        private void btnThemMH_Click(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            dgLoaiHang.Enabled = false;
            btnThemMH.Enabled = false;
            btnSuaMH.Enabled = false;
            btnXoaMH.Enabled = false;
            btnLuuMH.Enabled = true;
            btnHuyMH.Enabled = true;
            btnThoatMH.Enabled = true;

            txtMaHang.ResetText();
            txtTenHang.ResetText();
            txtSoSeri.ResetText();
            txtNhaSX.ResetText();
            dateNamsanxuat.ResetText();
            lupMaLoai.ResetText();
            dateNamsanxuat.EditValue = System.DateTime.Today.Date;

            txtMaHang.Properties.ReadOnly = false;
            txtSoSeri.Properties.ReadOnly = false;
            txtNhaSX.Properties.ReadOnly = false;
            txtTenHang.Properties.ReadOnly = false;
            lupMaLoai.Properties.ReadOnly = false;
            dateNamsanxuat.Properties.ReadOnly = false;

            
        }

        // Xử lí sự kiện Click của nút "Sửa" Mặt hàng
        private void btnSuaMH_Click(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            dgLoaiHang.Enabled = false;
            update = 1;
            btnThemMH.Enabled = false;
            btnSuaMH.Enabled = false;
            btnXoaMH.Enabled = false;
            btnLuuMH.Enabled = true;
            btnHuyMH.Enabled = true;
            btnThoatMH.Enabled = true;

            txtMaHang.Properties.ReadOnly = true;
            txtSoSeri.Properties.ReadOnly = false;
            txtNhaSX.Properties.ReadOnly = false;
            txtTenHang.Properties.ReadOnly = false;
            lupMaLoai.Properties.ReadOnly = false;
            dateNamsanxuat.Properties.ReadOnly = false;
        }

        // Xử lí sự kiện Click của nút "Xóa" Mặt hàng
        private void btnXoaMH_Click(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            btnThemMH.Enabled = false;
            btnSuaMH.Enabled = false;
            btnXoaMH.Enabled = false;
            btnLuuMH.Enabled = true;
            btnHuyMH.Enabled = true;
            btnThoatMH.Enabled = true;
            if (MessageBox.Show("Ban co chac chan muon xoa?", "Thong bao", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                SqlCommand comm = new SqlCommand();
                comm.Connection = _classConnection.con;
                comm.CommandType = CommandType.Text;
                comm.CommandText = "Delete From MAT_HANG Where MAHANG=@MAHANG";
                comm.Parameters.Add("MAHANG", SqlDbType.NVarChar).Value = txtMaHang.Text;
                comm.ExecuteNonQuery();
                MessageBox.Show("Xoa thanh cong");
                LoadData();
                
            }
        }

        // Xử lí sự kiện Click của nút "Lưu" Mặt hàng
        private void btnLuuMH_Click(object sender, EventArgs e)
        {
            try
            {
                // Kiểm tra các trường phải nhập dữ liệu đầy đủ
                if (txtMaHang.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Mã Hàng'", "Thông báo");
                    return;
                }


                if (txtSoSeri.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Số Seri'", "Thông báo");
                    return;
                }

                if (txtTenHang.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Tên Hàng'", "Thông báo");
                    return;
                }

                if (txtNhaSX.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Tên Nhà sản xuất'", "Thông báo");
                    return;
                }

                if (lupMaLoai.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa nhập 'Tên Mã loại' ", "Thông báo");
                    return;
                }

                if (dateNamsanxuat.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Năm sản xuất' ", "Thông báo");
                    return;
                }

                
                if (update == 0)
                {
                    // Kiểm tra Mã mặt hàng khi đã tồn tại trong CSDL hay chưa thêm một mặt hàng mới 
                    SqlCommand comm = new SqlCommand();
                    comm.Connection = _classConnection.con;
                    comm.CommandType = CommandType.Text;
                    comm.CommandText = "Select * From MAT_HANG Where MAHANG=@MAHANG";
                    comm.Parameters.Add("MAHANG", SqlDbType.VarChar).Value = txtMaHang.Text;
                    comm.ExecuteNonQuery();
                    da = new SqlDataAdapter();
                    ds = new DataSet();
                    da.SelectCommand = comm;
                    da.Fill(ds);
                    dt = ds.Tables[0];
                    if (dt != null && dt.Rows.Count > 0)
                    {
                        MessageBox.Show("Đã tồn tại Loại hàng có mã '" + txtMaHang.Text.ToUpper() + "'! \nVui lòng kiểm tra lại!");
                        return;
                    }

                    // Kiểm tra Mã mặt hàng khi đã tồn tại trong CSDL hay chưa thêm một mặt hàng mới 
                    SqlCommand com = new SqlCommand();
                    com.Connection = _classConnection.con;
                    com.CommandType = CommandType.Text;
                    com.CommandText = "Select * From MAT_HANG Where MAHANG=@MAHANG";
                    com.Parameters.Add("MAHANG", SqlDbType.VarChar).Value = txtMaHang.EditValue;
                    com.ExecuteNonQuery();
                    da = new SqlDataAdapter();
                    ds = new DataSet();
                    da.SelectCommand = com;
                    da.Fill(ds);
                    dt = ds.Tables[0];
                    if (dt != null && dt.Rows.Count > 0)
                    {
                        MessageBox.Show("Đã tồn tại Loại hàng có tên '" + txtMaHang.Text.ToUpper() + "'! \nVui lòng kiểm tra lại!");
                        return;
                    }



                    // Kiểm tra tên mặt hàng khi đã tồn tại trong CSDL hay chưa thêm một mặt hàng mới 
                    SqlDataAdapter daa = new SqlDataAdapter();
                    DataSet das = new DataSet();
                    DataTable dat = new DataTable();
                    SqlCommand commd = new SqlCommand();
                    commd.Connection = _classConnection.con;
                    commd.CommandType = CommandType.Text;
                    commd.CommandText = "Select * From MAT_HANG Where TENHANG=@TENHANG";
                    commd.Parameters.Add("TENHANG", SqlDbType.VarChar).Value = txtTenHang.Text;
                    commd.ExecuteNonQuery();
                    daa = new SqlDataAdapter();
                    das = new DataSet();
                    daa.SelectCommand = commd;
                    daa.Fill(das);
                    dat = das.Tables[0];
                    if (dat != null && dat.Rows.Count > 0)
                    {
                        MessageBox.Show("Đã tồn tại tên Mặt hàng'" + txtTenHang.Text + "'! \nVui lòng kiểm tra lại!");
                        return;
                    }

                    //Thêm dữ liệu vào CSDL
                    com = _classConnection.con.CreateCommand();
                    com.CommandText = "Insert Into MAT_HANG Values(@MAHANG,@MALOAIHANG,@SOSERI,@TENHANG,@NHASANXUAT,@NAMSANXUAT)";

                    com.Parameters.Add("@MAHANG", SqlDbType.VarChar).Value = txtMaHang.EditValue;
                    com.Parameters.Add("@SOSERI", SqlDbType.VarChar).Value = txtSoSeri.EditValue;
                    com.Parameters.Add("@MALOAIHANG", SqlDbType.NVarChar).Value = lupMaLoai.EditValue;
                    com.Parameters.Add("@TENHANG", SqlDbType.VarChar).Value = txtTenHang.EditValue;
                    com.Parameters.Add("@NAMSANXUAT", SqlDbType.Date).Value = dateNamsanxuat.DateTime.Date;
                    com.Parameters.Add("@NHASANXUAT", SqlDbType.VarChar).Value = txtNhaSX.EditValue;
                    com.ExecuteNonQuery();

                    MessageBox.Show("Đã thêm mặt hàng vào thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
                else
                {
                    // Cập nhật dữ liệu của CSDL
                    txtMaHang.Properties.ReadOnly = true;                   
                    com = _classConnection.con.CreateCommand();
                    com.CommandText = "Update MAT_HANG set SOSERI= @SOSERI, MALOAIHANG = @MALOAIHANG,TENHANG = @TENHANG, NAMSANXUAT = @NAMSANXUAT, NHASANXUAT = @NHASANXUAT where MAHANG=@MAHANG";
                    com.Parameters.Add("@MAHANG", SqlDbType.VarChar).Value = txtMaHang.EditValue;
                    com.Parameters.Add("@SOSERI", SqlDbType.VarChar).Value = txtSoSeri.EditValue;
                    com.Parameters.Add("@MALOAIHANG", SqlDbType.NVarChar).Value = lupMaLoai.EditValue;
                    com.Parameters.Add("@TENHANG", SqlDbType.VarChar).Value = txtTenHang.EditValue;
                    com.Parameters.Add("@NAMSANXUAT", SqlDbType.Date).Value = dateNamsanxuat.DateTime.Date;
                    com.Parameters.Add("@NHASANXUAT", SqlDbType.VarChar).Value = txtNhaSX.EditValue;
                    com.ExecuteNonQuery();

                    MessageBox.Show("Đã cập nhật thông tin mặt hàng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);


                }
                LoadData();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }

        // Xử lí sự kiện Click của nút "Hủy" Mặt hàng
        private void btnHuyMH_Click(object sender, EventArgs e)
        {
            LoadData();
        }

        // Xử lí sự kiện Click của nút "Thoát" Mặt hàng
        private void btnThoatMH_Click(object sender, EventArgs e)
        {
            this.Close();
            _classConnection.con.Close();
        }

        // Xử lí sự kiện Click của nút "Thêm" Loại Hàng
        private void btnThem_Click_1(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            dgMatHang.Enabled = false;
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;
            txtMaLoai.ResetText();
            txtTenLoai.ResetText();

            txtMaLoai.Properties.ReadOnly = false;
            txtTenLoai.Properties.ReadOnly = false;
        }

        // Xử lí sự kiện Click của nút "Thêm" Loại Hàng
        private void btnSua_Click_1(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            sua = 1;
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;
            txtMaLoai.Properties.ReadOnly = true;
            txtTenLoai.Properties.ReadOnly = false;
            dgMatHang.Enabled = false;
        }

        // Xử lí sự kiện Click của nút "Xóa" Loại Hàng
        private void btnXoa_Click_1(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;
            if (MessageBox.Show("Ban co chac chan muon xoa?", "Thong bao", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                SqlCommand comm = new SqlCommand();
                comm.Connection = _classConnection.con;
                comm.CommandType = CommandType.Text;
                comm.CommandText = "Delete From LOAI_HANG Where MALOAIHANG=@MALOAIHANG";
                comm.Parameters.Add("MALOAIHANG", SqlDbType.NVarChar).Value = txtMaLoai.Text;
                comm.ExecuteNonQuery();
                MessageBox.Show("Xoa thanh cong");
                LoadData();
               
            }

        }

        // Xử lí sự kiện Click của nút "Lưu" Loại hàng
        private void btnLuu_Click_1(object sender, EventArgs e)
        {
            try
            {
                // Kiểm tra các trường phải nhập dữ liệu đầy đủ
                if (txtMaLoai.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Mã Loại hàng'", "Thông báo");
                    return;
                }


                if (txtTenLoai.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Tên Loại hàng'", "Thông báo");
                    return;
                }

                

                if (sua == 0)
                {
                    // Kiểm tra Mã loại hàng đã tồn tại trong CSDL hay chưa khi thêm một MÃ LOẠI HÀNG mới
                    SqlCommand comm = new SqlCommand();
                    comm.Connection = _classConnection.con;
                    comm.CommandType = CommandType.Text;
                    comm.CommandText = "Select * From LOAI_HANG Where MALOAIHANG=@MALOAIHANG";
                    comm.Parameters.Add("MALOAIHANG", SqlDbType.VarChar).Value = txtMaLoai.Text;
                    comm.ExecuteNonQuery();
                    da = new SqlDataAdapter();
                    ds = new DataSet();
                    da.SelectCommand = comm;
                    da.Fill(ds);
                    dt = ds.Tables[0];
                    if (dt != null && dt.Rows.Count > 0)
                    {
                        MessageBox.Show("Đã tồn tại Loại hàng có mã '" + txtMaLoai.Text.ToUpper() + "'! \nVui lòng kiểm tra lại!");
                        return;
                    }

                    // Kiểm tra Tên hàng đã tồn tại trong CSDL hay chưa khi thêm một mã loại hàng mới
                    SqlDataAdapter daa = new SqlDataAdapter();
                    DataSet das = new DataSet();
                    DataTable dat = new DataTable();
                    SqlCommand commd = new SqlCommand();
                    commd.Connection = _classConnection.con;
                    commd.CommandType = CommandType.Text;
                    commd.CommandText = "Select * From LOAI_HANG Where TENLOAIHANG=@TENLOAIHANG";
                    commd.Parameters.Add("TENLOAIHANG", SqlDbType.VarChar).Value = txtTenLoai.Text;
                    commd.ExecuteNonQuery();
                    daa = new SqlDataAdapter();
                    das = new DataSet();
                    daa.SelectCommand = commd;
                    daa.Fill(das);
                    dat = das.Tables[0];
                    if (dat != null && dat.Rows.Count > 0)
                    {
                        MessageBox.Show("Đã tồn tại tên Loại hàng'" + txtTenLoai.Text + "'! \nVui lòng kiểm tra lại!");
                        return;
                    }
                    //Thêm dữ liệu vào CSDL
                    com = _classConnection.con.CreateCommand();
                    com.CommandText = "Insert Into LOAI_HANG Values(@MALOAIHANG,@TENLOAIHANG)";

                    com.Parameters.Add("@MALOAIHANG", SqlDbType.VarChar).Value = txtMaLoai.EditValue;
                    com.Parameters.Add("@TENLOAIHANG", SqlDbType.VarChar).Value = txtTenLoai.EditValue;
                    com.ExecuteNonQuery();

                    MessageBox.Show("Đã thêm loại hàng vào thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
                else
                {
                    // Cập nhật dữ liệu của CSDL
                    txtMaLoai.Properties.ReadOnly = true;
                    com = _classConnection.con.CreateCommand();
                    com.CommandText = "Update LOAI_HANG set TENLOAIHANG = @TENLOAIHANG where MALOAIHANG=@MALOAIHANG";

                    com.Parameters.Add("@MALOAIHANG", SqlDbType.VarChar).Value = txtMaLoai.EditValue;
                    com.Parameters.Add("@TENLOAIHANG", SqlDbType.VarChar).Value = txtTenLoai.EditValue;
                    com.ExecuteNonQuery();

                    MessageBox.Show("Đã cập nhật thông tin loại hàng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);


                }
                LoadData();
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }

        // Xử lí sự kiện Click của nút "Hủy" Loại Hàng
        private void btnHuy_Click_1(object sender, EventArgs e)
        {
            LoadData();
        }

        // Xử lí sự kiện Click của nút "Thoát"
        private void btnThoat_Click_1(object sender, EventArgs e)
        {

            this.Close();
            _classConnection.con.Close();
        }

        // Code chỉ cho phép nhập số vào trường Số seri
        private void txtSoSeri_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                e.Handled = true;
        }
    }
}